package com.example.demo.leetcode.classics150;

import java.util.Arrays;

/**
 * ******************************************************
 *
 * @author liugh9
 * @version 1.0
 * @classname _118在排序数组中查找元素的第一个和最后一个位置
 * @description
 * @date 2023/08/16 20:12
 * <p>
 * ******************************************************
 */
public class _118在排序数组中查找元素的第一个和最后一个位置 {

    public int[] searchRange(int[] nums, int target) {
        return new int[]{left(nums, 0, nums.length - 1, target), right(nums, 0, nums.length - 1, target)};
    }

    private int left(int[] nums, int lo, int hi, int target) {
        int mid;
        while (lo <= hi) {
            mid = hi - (hi - lo) / 2;
            if (nums[mid] > target) {
                hi = mid - 1;
            } else if (nums[mid] < target) {
                lo = mid + 1;
            } else {
                hi = mid - 1;
            }
        }

        return lo <= nums.length - 1 && nums[lo] == target ? lo : -1;
    }

    private int right(int[] nums, int lo, int hi, int target) {
        int mid;
        while (lo <= hi) {
            mid = hi - (hi - lo) / 2;
            if (nums[mid] > target) {
                hi = mid - 1;
            } else if (nums[mid] < target) {
                lo = mid + 1;
            } else {
                lo = mid + 1;
            }
        }

        return lo - 1 >= 0 && nums[lo - 1] == target ? lo - 1 : -1;
    }

    public static void main(String[] args) {
        _118在排序数组中查找元素的第一个和最后一个位置 s = new _118在排序数组中查找元素的第一个和最后一个位置();
        System.out.println(Arrays.toString(s.searchRange(new int[]{5, 7, 7, 8, 8, 10}, 6)));
    }
}
